home *** CD-ROM | disk | FTP | other *** search
/ SGI Developer Toolbox 6.1 / SGI Developer Toolbox 6.1 - Disc 4.iso / public / SciAn / src / ScianDepend.c < prev    next >
C/C++ Source or Header  |  1994-08-01  |  3KB  |  159 lines

  1. /*ScianDepend.c
  2.   Eric Pepke
  3.   May 22, 1991
  4.   Dependencies system for SciAn
  5. */
  6.  
  7. #include "Scian.h"
  8. #include "ScianTypes.h"
  9. #include "ScianIDs.h"
  10. #include "ScianErrors.h"
  11. #include "ScianDepend.h"
  12.  
  13. Bool mustMake = false;
  14.  
  15. static void CallBack(obj, destVar, indVar, sourceVar)
  16. ObjPtr obj;
  17. NameTyp destVar, indVar, sourceVar;
  18. {
  19.     ObjPtr indObject;
  20.     if (indVar)
  21.     {
  22.     MakeVar(obj, indVar);
  23.     indObject = GetVar(obj, indVar);
  24.     if (!indObject) return;
  25.     }
  26.     else
  27.     {
  28.     indObject = obj;
  29.     }
  30.     MakeVar(indObject, sourceVar);
  31.  
  32.     if (CompareVarChangeCounts(obj, destVar, indObject, sourceVar))
  33.     {
  34.     /*Yes, it needs to be made*/
  35.  
  36. #ifdef DEBUG
  37.         ObjPtr name;
  38.         char out[256];
  39.         name = GetVar(obj, NAME);
  40.  
  41.         sprintf(out, "Need to make object %lx ", obj);
  42.         if (name)
  43.         {
  44.         sprintf(tempStr, "(%s) ", GetString(name));
  45.         strcat(out, tempStr);
  46.         }
  47.         sprintf(tempStr, "variable %s ", IDName(destVar));
  48.         strcat(out, tempStr);
  49.  
  50.         sprintf(tempStr, "due to change in %s", IDName(sourceVar));
  51.         strcat(out, tempStr);
  52.  
  53.         puts(out);
  54. #endif
  55.     mustMake = true;
  56.     }
  57. }
  58.  
  59. int testomatic (double);
  60.  
  61. Bool MakeVar(origObj, destVar)
  62. ObjPtr origObj;
  63. int destVar;
  64. /*Makes destVar within origObj.  Returns true iff it had to make it.*/
  65. {
  66.     ObjPtr class, var;
  67.     long initialCount;
  68.     FuncTyp method;
  69.     Bool retVal = false;
  70.     Bool oldMustMake;
  71.  
  72.     oldMustMake = mustMake;
  73.     mustMake = false;
  74.  
  75.     initialCount = GetVarChangeCount(origObj, destVar);
  76.     GetDependencies(origObj, destVar, CallBack);
  77.     retVal = initialCount == GetVarChangeCount(origObj, destVar) ? false : true;
  78.  
  79.     if (GetVarChangeCount(origObj, destVar) <= 0)
  80.     {
  81. #ifdef DEBUG
  82.         ObjPtr name;
  83.         char out[256];
  84.         name = GetVar(origObj, NAME);
  85.  
  86.         sprintf(out, "Need to make object %lx ", origObj);
  87.         if (name)
  88.         {
  89.         sprintf(tempStr, "(%s) ", GetString(name));
  90.         strcat(out, tempStr);
  91.         }
  92.         sprintf(tempStr, "variable %s ", IDName(destVar));
  93.         strcat(out, tempStr);
  94.  
  95.         sprintf(tempStr, "first time");
  96.         strcat(out, tempStr);
  97.  
  98.         puts(out);
  99. #endif
  100.     mustMake = true;
  101.  
  102.     }
  103.  
  104.     if (mustMake)
  105.     {
  106.     /*Yes, it needs to be made*/
  107.     FuncTyp method;
  108.  
  109. #ifdef DEBUG
  110.         ObjPtr name;
  111.         char out[256];
  112.         name = GetVar(origObj, NAME);
  113.  
  114.         sprintf(out, "Making object %lx ", origObj);
  115.         if (name)
  116.         {
  117.         sprintf(tempStr, "(%s) ", GetString(name));
  118.         strcat(out, tempStr);
  119.         }
  120.         sprintf(tempStr, "variable %s", IDName(destVar));
  121.         strcat(out, tempStr);
  122.  
  123.         puts(out);
  124. #endif
  125.  
  126.     method = GetMethod(origObj, destVar);
  127.     if (method)
  128.     {
  129.         (*method)(origObj);
  130.     }
  131.     else
  132.     {
  133.         /*SetVar(origObj, destVar, NULLOBJ);*/
  134.         /*ReportError("MakeVar", "No make method found");*/
  135.     }
  136.     }
  137.  
  138.     mustMake = oldMustMake;
  139.  
  140.     return retVal;
  141. }
  142.  
  143. void DeclareDependency(object, destVar, sourceVar)
  144. ObjPtr object;
  145. int destVar, sourceVar;
  146. /*Declares a variable dependency within object of destVar on sourceVar*/
  147. {
  148.     SetDependency(object, destVar, sourceVar);
  149. }
  150.  
  151. void DeclareIndirectDependency(object, destVar, indirectObject, sourceVar)
  152. ObjPtr object;
  153. int destVar, indirectObject, sourceVar;
  154. /*Declares a variable dependency within object of destVar on sourceVar
  155.   within object indirectObject*/
  156. {
  157.     SetIndirectDependency(object, destVar, indirectObject, sourceVar);
  158. }
  159.